💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    00 DRF개발 방식 및 강의목록 | ✅ 편저: 코담 운영자

    1. DRF개발 방식

    Django REST Framework(DRF)에서 가장 많이 쓰이고 공식적으로도 추천되는 방식은 다음과 같습니다

    🔗 소스 1: bugbytes-io/drf-course-api

    🔗 소스 2: braverokmc79/Django_REST_Framework_Series

    1위: 제네릭 뷰(GenericAPIView + Mixin / 단축 클래스)


      #GenericAPIView
      path("generics/list/", TodoGenericsListAPI.as_view()),
      path("generics/create/", TodoGenericsCreateAPI.as_view()),
      path("generics/retrieve/<int:pk>/", TodoGenericsRetrieveAPI.as_view()),
      path("generics/update/<int:pk>/", TodoGenericsUpdateAPI.as_view()),  
      path("generics/delete/<int:pk>/", TodoGenericsDeleteAPI.as_view()),
    
    
    
      # GenericAPIView + Mixin
      path("mixin_generics/", TodoGenericsListCreateAPI.as_view()),
      path("mixin_generics/<int:pk>/", TodoGenericsRetrieveUpdateDeleteAPI.as_view()),
    

    🔖 GenericAPIView 호출예

     #
      # http://127.0.0.1:8000/todo/generics/list/
      # http://127.0.0.1:8000/todo/generics/create/
      # http://127.0.0.1:8000/todo/generics/retrieve/1/
      # http://127.0.0.1:8000/todo/generics/update/1/
      # http://127.0.0.1:8000/todo/generics/delete/1
      
    

    🔖 GenericAPIView + Mixin 호출예

    # List + Create 
    #generics.ListCreateAPIView
    # http://127.0.0.1:8000/todo/mixin_generics/   GET, CREATE
    
    
    
    # Retrieve + Update + Delete (RUD)
    # generics.RetrieveUpdateDestroyAPIView
    # http://127.0.0.1:8000/todo/mixin_generics/1/ GET, PUT, DELETE 모두 처리
    

    [방식 1] 단축 클래스(Generic Class-based Views)

    from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
    from .models import Todo
    from .serializers import TodoSerializer
    
    class TodoListCreateAPI(ListCreateAPIView):
        queryset = Todo.objects.all()
        serializer_class = TodoSerializer
    
    class TodoDetailAPI(RetrieveUpdateDestroyAPIView):
        queryset = Todo.objects.all()
        serializer_class = TodoSerializer
    
    ✅ RetrieveUpdateDestroyAPIView는 다음 HTTP 메서드 3개를 처리합니다:
    메서드 설명 예시 URL
    GET 상세 조회 /todo/1/
    PUT 전체 수정 /todo/1/ + JSON 바디
    DELETE 삭제 /todo/1/
    ✅ 장점:
    • RetrieveAPIView + UpdateAPIView + DestroyAPIView하나로 합친 클래스

    • 중복 없이 하나의 API endpoint에서 상세조회, 수정, 삭제 처리 가능

    ✅ 구성 요약:
    class TodoGenericsRetrieveUpdateDeleteAPI(generics.RetrieveUpdateDestroyAPIView):
        queryset = Todo.objects.all()         # 어디서 데이터를 가져올지
        serializer_class = TodoSerializer     # 데이터를 어떻게 직렬화할지
    

    [방식 2] GenericAPIView + Mixin 조합

    from rest_framework.generics import GenericAPIView
    from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
    from .models import Todo
    from .serializers import TodoSerializer
    
    class TodoListCreateAPI(ListModelMixin, CreateModelMixin, GenericAPIView):
        queryset = Todo.objects.all()
        serializer_class = TodoSerializer
    
        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            return self.create(request, *args, **kwargs)
    
    class TodoDetailAPI(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, GenericAPIView):
        queryset = Todo.objects.all()
        serializer_class = TodoSerializer
    
        def get(self, request, *args, **kwargs):
            return self.retrieve(request, *args, **kwargs)
    
        def put(self, request, *args, **kwargs):
            return self.update(request, *args, **kwargs)
    
        def delete(self, request, *args, **kwargs):
            return self.destroy(request, *args, **kwargs)
    
    ✅ 장점:
    • 조합의 유연성: 필요한 Mixin만 골라 쓸 수 있어 정밀 제어 가능

    • 공식 문서 예제에서도 종종 등장하는 패턴

    • 복잡한 조건 처리나 커스터마이징이 쉬움


    🔖 제너릭 뷰(Generic View) 방식 비교 요약

    항목 단축 클래스(Generic Views) GenericAPIView + Mixin 조합
    코드 간결성 매우 높음 (GET/POST/PUT/DELETE 자동 지원) 중간 (직접 메서드 구현 필요)
    사용 난이도 쉬움 약간 높음 (직접 Mixin 조합 필요)
    커스터마이징 낮음 (기본 동작 위주) 높음 (로직 세분화 및 복잡한 처리 가능)
    유지보수 쉬움 (반복 코드 없음) 구조 명확, 복잡한 프로젝트에 적합
    공식 권장 여부 ✅ 가장 먼저 소개되는 방식 ✅ 다양한 상황에 대응 가능

    정리: 대부분의 경우엔 단축 클래스(Generic View)로 충분하며, 특별한 커스터마이징이 필요할 때는 GenericAPIView + Mixin 조합을 고려하는 것이 좋습니다.


    ✅ 2위: ViewSet + Router 방식

    🔹 예시:

    from rest_framework.viewsets import ModelViewSet
    from .models import Todo
    from .serializers import TodoSerializer
    
    class TodoViewSet(ModelViewSet):
        queryset = Todo.objects.all()
        serializer_class = TodoSerializer
    
    

    URL은 router를 통해 자동 생성됨

    # urls.py
    from rest_framework.routers import DefaultRouter
    from .views import TodoViewSet
    
    router = DefaultRouter()
    router.register(r'todos', TodoViewSet)
    
    urlpatterns = router.urls
    
    

    🔖 장점:

    항목 설명
    URL 자동 생성 list, retrieve, create, update, destroy 등 자동 처리
    Admin 스타일의 구성 Django Admin처럼 직관적
    대규모 프로젝트에 유리 URL, View, Action 간 결합이 명확함

    ✅ 3위: APIView (직접 메서드 구현)

    from rest_framework.views import APIView
    class TodoAPIView(APIView):
        def get(self, request):
            ...
        def post(self, request):
            ...
    

    ⚠️ 단점:

    • 반복 코드 많음

    • queryset, serializer 자동 지원 없음

    • CRUD 모두 직접 처리해야 함

    • 일반적으로 복잡하거나 비표준 API에만 사용

    🎯 결론: DRF에서 가장 많이 쓰이고 추천되는 방식

    순위 방식 추천 상황
    ✅ 1위 GenericAPIView + 단축 클래스 (ListCreateAPIView, RetrieveUpdateDestroyAPIView) 일반적인 CRUD API
    ✅ 2위 ModelViewSet + Router 관리형 API 전체 자동화 원할 때
    ⚠️ 3위 APIView 복잡한 로직, 커스텀 처리 많을 때만 사용

    2-강의 목록

    Django REST Framework(DRF) 강의

    아래는 Django REST Framework를 체계적으로 학습할 수 있는 BugBytes 의 YouTube 강의 시리즈입니다.


    01 - 설정과 모델 구성

    - 설정과 모델 구성


    02 - Serializer와 Response 객체 & 브라우저 기반 API

    - Serializer와 Response 객체 & 브라우저 기반 API


    03 - 중첩 Serializer, SerializerMethodField 및 관계 표현

    - 중첩 Serializer, SerializerMethodField 및 관계 표현


    04 - Serializer 하위 클래스와 집계형 API 데이터 처리

    - Serializer 하위 클래스와 집계형 API 데이터 처리


    05 - django-silk를 활용한 성능 최적화

    - django-silk를 활용한 성능 최적화


    06 - Generic View 소개 & ListAPIView & RetrieveAPIView

    - Generic View 소개 & ListAPIView & RetrieveAPIView


    07 - 동적 필터링 & get_queryset() 메서드 오버라이딩

    - 동적 필터링 & get_queryset() 메서드 오버라이딩


    08 - 권한 시스템 및 테스트

    - 권한 시스템 및 테스트


    09 - APIView 클래스 활용법

    - APIView 클래스 활용법


    10-GET과 POST를 동시에 처리하는 ListCreateAPIView

    - 데이터 생성하기 & ListCreateAPIView와 Generic View 내부 구조


    11 - Generic View에서 권한 설정 커스터마이징 & REST Client 사용

    - Generic View에서 권한 설정 커스터마이징 & REST Client 사용


    12 - simplejwt를 이용한 JWT 인증

    - simplejwt를 이용한 JWT 인증


    13 - Refresh Token과 JWT 인증 심화

    - Refresh Token과 JWT 인증 심화


    14 - 데이터 수정 및 삭제 처리

    - 데이터 수정 및 삭제 처리


    15 - DRF-spectacular로 DRF API 문서화 도구 및 Swagger(OpenAPI) 문서 자동화

    - drf-spectacular로 DRF API 문서화 도구


    16 - django-filter와 DRF를 이용한 API 필터링

    - django-filter와 DRF를 이용한 API 필터링


    17 - SearchFilter와 OrderingFilter 사용하기

    - SearchFilter와 OrderingFilter 사용하기


    18 - 사용자 정의 필터 백엔드 만들기

    - 사용자 정의 필터 백엔드 만들기


    19 - API 페이지네이션 설정

    - API 페이지네이션 설정


    20 - ViewSet & Router 기본 사용법

    - ViewSet & Router 기본 사용법


    21 - Viewset에서의 액션, 필터링, 권한 처리

    - Viewset에서의 액션, 필터링, 권한 처리


    22 - Viewset 권한 설정 & 관리자 vs 일반 사용자

    - Viewset 권한 설정 & 관리자 vs 일반 사용자


    23 - 중첩 객체 생성하기 & create() 오버라이딩

    - 중첩 객체 생성하기 & create() 오버라이딩


    24 - 중첩 객체 수정하기 & update() 사용

    - 중첩 객체 수정하기 & update() 사용


    25 - ModelSerializer 필드 구성 & Redis 캐싱 처리

    - ModelSerializer 필드 구성 & Redis 캐싱 처리


    26 - Django & Redis - Vary Header를 통한 캐싱 제어

    - Django & Redis - Vary Header를 통한 캐싱 제어


    27 - Vary 헤더로 캐시 제어

    - Vary 헤더로 캐시 제어


    28 - API 호출 제한 (Throttling)

    - API 호출 제한 (Throttling)


    29 - API 테스트하기

    - API 테스트하기


    30 - Celery 비동기 작업 처리하기

    - Celery 비동기 작업 처리하기


    31 - Djoser를 활용한 인증 시스템 구축 & JWT 베스트 프랙티스

    - Djoser를 활용한 인증 시스템 구축 & JWT 베스트 프랙티스


    TOP
    preload preload